package com.type.web;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.type.service.TypeNineService;
import com.type.vo.AdminManageBoardVO;
import com.type.vo.ListAdminManageBoardVO;

@Controller
public class TypeNineController {

	
	@Resource(name = "TypeNineService")
	private TypeNineService service;
	
	/*
	 * 전체 게시판 목록 출력
	 */
	@RequestMapping("/typeNine.do")
	public String adminManageList(Model model, @RequestParam(value="page", required=false) String page){
		ListAdminManageBoardVO listAdminBoard = null;
		
		int numPage =1;
		try{
			if(page!=null ){
				numPage = Integer.parseInt(page);
			}else {
				numPage = 1;
			}
			listAdminBoard =service.selectAllAdminBoardByPage(numPage);
			model.addAttribute("listAdminBoard", listAdminBoard);
			model.addAttribute("page", page);
		}
		catch(Exception e){
			e.printStackTrace();
			model.addAttribute("message", "리스트 뷰 과정에서 오류가 발생했습니다. <br> 다시 시도해주세요.");
		}
		return "/type/typeNine";
	}
	
	/*
	 * 입력하기 위한 창 띄우기
	 */
	@RequestMapping("/ViewForRegisterAdminBoard.do")
	public String registerViewAdminBoard(){
		return "/type/typeNine/InputBoardAdmin";
	}
	
	/*
	 * 게시판 등록
	 */
	@RequestMapping("/registerAdminBoard.do")
	public String registerAdminManageBoard(@ModelAttribute AdminManageBoardVO boardVO, Model model ){
		String boardName = null;
		try{
			boardName = service.insertAdminBoard(boardVO);
			model.addAttribute("boardVO", boardVO);
			model.addAttribute("message", boardName + " 등록 완료.");
		}
		catch(Exception e){
			e.printStackTrace();
			model.addAttribute("message", "등록하는데 오류가 발생했습니다.<br> 다시 시도해주세요.");
			return "forward:/error.do";
		}
		return "/type/typeNine/InputSuccessBoardAdmin";
	}
	
	/*
	 * 수정하기 위한 입력폼으로 이동.
	 */
	@RequestMapping("/ViewForModifyAdminBoard.do")
	public String ViewForModifyAdminBoard(@RequestParam(value="boardNo", required=false)String boardNo, Model model){
		
		try{
			AdminManageBoardVO boardVO= service.selectOneAdminBoardByNo(Integer.parseInt(boardNo));
			model.addAttribute("boardVO", boardVO);
			
		}catch(Exception e){
			e.printStackTrace();
			model.addAttribute("message", " 오류가 발생했습니다.<br> 다시 시도해주세요.");
			return "forward:/error.do";
		}
		return "/type/typeNine/oneBoardView";
	}
	/*
	 * 해당 게시판 항목 수정하기
	 */
	@RequestMapping("/modifyAdminBoard.do")
	public String modifyAdminBoard(@ModelAttribute AdminManageBoardVO boardVO, Model model){
		try{
			AdminManageBoardVO modifyBoard= service.updateAdminBoard(boardVO);
			model.addAttribute("boardVO", modifyBoard);
			model.addAttribute("boardNo", boardVO.getBoardNo());
			model.addAttribute("message","수정이 완료되었습니다." );
		}catch(Exception e){
			e.printStackTrace();
			model.addAttribute("message", "수정하는데 오류가 발생했습니다.<br> 다시 시도해주세요.");
			return "forward:/error.do";
		}
		
		return  "/type/typeNine/InputSuccessBoardAdmin";
	}
	
	/*
	 * 해당 게시판 삭제
	 */
	@RequestMapping("/removeAdminBoard.do")
	public String removeAdminBoard(Model model, @RequestParam(value="boardNo", required=false)String boardNo){
		try{
			String boardName = service.deleteAdminBoardByNo(Integer.parseInt(boardNo));
			model.addAttribute("message", boardName +"이(가) 정상적으로 삭제되었습니다.");
		}
		catch(Exception e){
			e.printStackTrace();
			model.addAttribute("message", "제거하는데 오류가 발생했습니다.<br> 다시 시도해주세요.");
			return "forward:/error.do";
		}
		return "/type/typeNine";
	}
	
	/*
	 * 선택(클릭)으로 세부적인 내용 출력 - 입력 불가 폼(Form)으로 출력
	 */
	@RequestMapping("/selectOneAdminBoard.do")
	public String selectOneAdminBoard(Model model, @RequestParam(value="boardNo", required=false)String boardNo){
		try{
			AdminManageBoardVO boardVO = service.selectOneAdminBoardByNo(Integer.parseInt(boardNo));
			model.addAttribute("boardVO", boardVO);
		}catch(Exception e){
			e.printStackTrace();
			model.addAttribute("message", e.getMessage()+" ");
			return "forward:/error.do";
		}
		
		return "/type/typeNine/InputSuccessBoardAdmin";
	}
	
	/*
	 * 검색 항목 조건 선택 후 원하는 검색, 내용 페이징 단위로 출력
	 */
	@RequestMapping("/searchBoard.do")
	public String seacrhBoard(Model model,/* @RequestParam(value="page", required=false) String page, */
			@RequestParam("boardType") String boardType, @RequestParam("boardSearchSelector") String boardSearchSelector,
			@RequestParam("boardSearchText") String boardSearchText ){
		ListAdminManageBoardVO listAdminBoard = null;
		int numPage =1;
		try{
			/*if(page!=null ){
				numPage = Integer.parseInt(page);
			}else {
				numPage = 1;
			}*/
			if(boardSearchSelector.equals("boardName")){
				listAdminBoard = service.SearchAdminBoardNameByPage(numPage, boardType, boardSearchText);
			}else if (boardSearchSelector.equals("adminName")){
				listAdminBoard =service.searchAdminNameByPage(numPage, boardType, boardSearchText);
			}else {
				model.addAttribute("message", "<br>검색 과정에서 오류가 발생했습니다. <br> 다시 시도해주세요.");
				return "forward:/error.do";
			}
			
			model.addAttribute("listAdminBoard", listAdminBoard);
			model.addAttribute("page", numPage);
			
			if(listAdminBoard.getList().size()==0 ){
				model.addAttribute("message", "검색 결과가 없습니다.");
			}else{
				model.addAttribute("message", listAdminBoard.getList().size() +"개가 검색되었습니다.");
			}
			
		}
		catch(Exception e){
			e.printStackTrace();
			model.addAttribute("message", e.getMessage() +"<br>검색 과정에서 오류가 발생했습니다. <br> 다시 시도해주세요.");
			return "forward:/error.do";
		}
		return "/type/typeNine";
	}
	
	
}
